/**
 * @Author       : Mo 2427995270@qq.com
 * @Date         : 2025-07-31 00:56:46
 * @LastEditTime : 2025-08-01 00:24:03
 * @FilePath     : \ZN-1000-APP\hal_driver\ll_rtc.h
 * @Description  : RTC低层驱动
 * @Version      : V1.0
 * @History      :
 * @Note         :
 */
#ifndef __ll_rtc_H__
#define __ll_rtc_H__

/***************************************Includes***********************************/

#include <stdint.h>
#include <time.h>

/*************************************Public Macros********************************/
// #define


/***********************************Public Statement*******************************/

typedef struct {
    uint32_t rtc;
    uint32_t cfg_interrupt_priority; // 抢占中断优先级 建议优先级分组设置为4组，4位抢占
    time_t t;                        // 时间戳
    struct tm tm;                    // 时间结构体
} rtc_ll_t;

/***********************************Public Functions*******************************/



void rtc_ll_init(rtc_ll_t *rtc);
/**
 * @brief 设置日期时间
 * @param  rtc
 * @param  t                时间戳 可为NULL
 * @param  tm               时间结构体 可为NULL
 * @return int 0成功 -1失败
 * @note t 和 tm 二选一
 */
int rtc_set_date_time(rtc_ll_t *rtc, time_t *t, struct tm *tm);
/**
 * @brief 获取时间戳 本地UTC+8
 * @param  rtc              
 * @return time_t 时间戳
 * @note null
 */
time_t rtc_get_timestamp(rtc_ll_t *rtc);
/**
 * @brief 获取时间日期
 * @param  rtc              
 * @return struct tm* 时间结构体指针
 * @note null
 */
struct tm *rtc_get_date_time(rtc_ll_t *rtc);
/**
 * @brief 时间日期转时间戳
 * @param  tm               
 * @return time_t 
 * @note null
 */
time_t rtc_date_time_to_timestamp(struct tm *tm);
/**
 * @brief 时间戳转时间日期
 * @param  t                
 * @return struct tm* 
 * @note null
 */
struct tm *rtc_timestamp_to_date_time(time_t t);
/**
 * @brief 时间日期转字符串 format格式同strftime
 * @param  tm               
 * @param  format           格式化时间字符串
 * @param  buf              线程安全支持的缓冲区
 * @param  size             缓冲区大小
 * @return const char* 时间字符串 非线程安全
 * @note null
 */
const char *rtc_data_time_to_str(struct tm *tm, const char *format, void *buf, int size);

/************************** ********Public Variables************************** ****/


#endif
/* [] END OF FILE */
